The importance of error correction coding of data in digital computer systems has increased greatly as the density of the data recorded on mass storage media, more particularly magnetic disks, has increased. With higher recording densities, a tiny imperfection in the recording surface of a disk can corrupt a large amount of data. In order to avoid losing that data, error correction codes ("ECC's") are employed to, as the name implies, correct the erroneous data.
Before a string of data symbols is recorded on a disk, it is mathematically encoded to form ECC symbols. The ECC symbols are then appended to the data string to form code words--data symbols plus ECC symbols--and the code words are then stored on the disk. When the stored data is to be accessed from the disk, the code words containing the data symbols are retrieved from the disk and mathematically decoded. During decoding any errors in the data are detected and, if possible, corrected through manipulation of the ECC symbols [For a detailed description of decoding see Peterson and Weldon, Error Correction Codes, 2d Edition, MIT Press, 1972].
Stored digital data can contain multiple errors. One of the most effective types of ECC used for the correction of multiple errors is a Reed-Solomon code [For a detailed description of Reed-Solomon codes, see Peterson and Weldon, Error Correction Codes]. With Reed-Solomon codes, the encoding and decoding operations are performed over a Galois Field, using Galois Field addition, multiplication and division operations.
Galois Field division is generally a time consuming operation that significantly lengthens the ECC encoding and decoding processes. The time it takes to perform error correction operations adversely affects the rate at which data can be retrieved from a storage device and supplied to a user or to a computer application that requires the data.
One way to perform a Galois Field division operation, B/A, where A and B are elements of the Galois Field GF(2.sup.Q), is to determine the multiplicative inverse of A and multiply B by the inverse. Finding the inverse of a Galois Field element is not particularly straight forward. One solution to determining the inverse is to test each element of the field, by multiplying the element by B. This is very time consuming, particularly with the larger Galois Fields that are used to protect the higher-density data.
Another solution is to use a look-up table that contains the inverses. If a Galois Field GF(2.sup.2M) is used, a (2.sup.2M -1)-element look-up table is required. With many systems, it is undesirable to have such large look-up tables, which require both large amounts of storage space and relatively complex addressing circuitry.
A better solution is described in U.S. Pat. No. 4,975,876, which has a common inventor and is incorporated herein by reference. The system described in the '876 patent determines the multiplicative inverse of an element A of GF(2.sup.2M) by first computing a conversion factor, D=A.sup.2.sup..sup.M , and then multiplying A by D to produce an associated element C=A.sup.2.sup..sup.M .sup.+1. The element C is also an element of a smaller Galois Field, GF(2.sup.M), which is a subfield of GF(2.sup.2M). The system then determines the multiplicative inverse of C by entering a (2.sup.M -1)-element look-up table. The system next converts the inverse of C, C.sup.-1 =A.sup.-(2.sup..sup.M .sup.+1), to the multiplicative inverse of A by multiplying C.sup.-1 by the conversion factor D, to produce A.sup.-(2.sup..sup.M .sup.+1) *A.sup.2.sup..sup.M .sup.+1 =A.sup.-1, where "*" represents Galois Field multiplication.
The system described in the '876 patent works well and determines the multiplicative inverse of A relatively quickly, using a (2.sup.M -1)-entry look-up table rather than the larger (2.sup.2M -1)-entry table. The system, however, requires at least one relatively complex full Galois Field multiplier to multiply together two 2M-bit symbols. A single multiplier may be used multiple times to multiply together A and D, and then C.sup.-1 and D, or two of the multipliers may be used to perform the two multiplications. The multiplication operations, whether performed by one or two full Galois Field multipliers, involve manipulation of two 2M-bit symbols and are thus both relatively time consuming and complex. The system must also hold the 2M-bit conversion factor D that is used to produce C, until C.sup.-1 is retrieved from the look-up table.
We have devised an improved system that, for selected Galois Fields GF(2.sup.2M) where 2M+1 is prime, produces the multiplicative inverse of A in fewer clock cycles. Further, the improved system uses less complex circuitry than the system of the '876 patent. We discuss the improved system below.